package com.agentai.framework.common.email;

import cn.hutool.extra.mail.MailAccount;
import cn.hutool.extra.mail.MailUtil;
import lombok.extern.slf4j.Slf4j;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.text.MessageFormat;
import java.util.ArrayList;

/**
 * 邮件发送工具类
 *
 * @author yuwei
 * @date 2024-11-15 11:14
 */
@Slf4j
public class MailUtils {

    /**
     * 读取替换html文件模板中的信息
     *
     * @param title       正文标题
     * @param contentText 正文信息
     * @return 替换后文件模板中的信息
     */
    public static String scopeTemplate(String title, String contentText) {
        String filename = "templates.html";
        InputStream inputStream = ClassLoader.getSystemResourceAsStream(filename);
        BufferedReader fileReader = new BufferedReader(new InputStreamReader(inputStream));
        StringBuffer buffer = new StringBuffer();

        String line = "";
        try {
            while ((line = fileReader.readLine()) != null) {
                buffer.append(line);
            }
        } catch (IOException e) {
            log.info("read template:{}", e);
        } finally {
            try {
                inputStream.close();
            } catch (Exception e) {
                log.info("{}", e);
            }
            try {
                fileReader.close();
            } catch (Exception e) {
                log.info("{}", e);
            }
        }
        return MessageFormat.format(buffer.toString(), title, contentText);
    }

    /**
     * 发送邮件
     *
     * @param to           发送邮件地址
     * @param subject      发送邮件标题
     * @param contentTitle 正文标题
     * @param contentText  正文信息
     * @return 发送是否成功
     */
    public static boolean sendMail(String to, String subject, String contentTitle, String contentText) {
        String sendInfo = MailUtil.send(to, subject, scopeTemplate(contentTitle, contentText), true);
        log.info(sendInfo);
        return true;
    }

    /**
     * 批量发送邮件
     *
     * @param tos          发送邮件地址列表
     * @param subject      发送邮件标题
     * @param contentTitle 正文标题
     * @param contentText  正文信息
     * @return 发送是否成功
     */
    public static boolean sendMailList(ArrayList<String> tos, String subject, String contentTitle, String contentText) {
        String sendInfo = MailUtil.send(tos, subject, scopeTemplate(contentTitle, contentText), true);
        log.info(sendInfo);
        return true;
    }

    /**
     * 自定义邮件服务器发送邮件
     *
     * @param account      邮件服务器信息
     * @param to           发送邮件地址
     * @param subject      发送邮件标题
     * @param contentTitle 正文标题
     * @param contentText  正文信息
     * @return 发送是否成功
     */
    public static boolean customSendMail(MailAccount account, String to, String subject, String contentTitle, String contentText) {
        String sendInfo = MailUtil.send(account, to, subject, scopeTemplate(contentTitle, contentText), true);
        log.info(sendInfo);
        return true;
    }

    /**
     * 自定义邮件服务器批量发送邮件
     *
     * @param account      邮件服务器信息
     * @param tos          发送邮件地址列表
     * @param subject      发送邮件标题
     * @param contentTitle 正文标题
     * @param contentText  正文信息
     * @return 发送是否成功
     */
    public static boolean customSendMailList(MailAccount account, ArrayList<String> tos, String subject, String contentTitle, String contentText) {
        String sendInfo = MailUtil.send(account, tos, subject, scopeTemplate(contentTitle, contentText), true);
        log.info(sendInfo);
        return true;
    }

}
